package com.example.employeemanagement.service.impl;

import com.example.employeemanagement.dto.LoginResponseDto;
import com.example.employeemanagement.entry.Employee;
import com.example.employeemanagement.mapper.EmployeeMapper;
import com.example.employeemanagement.service.AuthService;
import com.example.employeemanagement.util.JwtUtil;
import com.example.employeemanagement.vo.LoginVo;
import com.example.employeemanagement.vo.RegisterVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Objects;

@Service
public class AuthServiceImpl implements AuthService {

    @Autowired
    private EmployeeMapper mapper;
    
    @Autowired
    private JwtUtil jwtUtil;

    @Override
    public LoginResponseDto login(LoginVo user) {
        // 参数校验
        if (user == null) {
            throw new IllegalArgumentException("用户对象不能为空");
        }
        if (user.getUsername() == null || user.getUsername().isEmpty()) {
            throw new IllegalArgumentException("用户名不能为空");
        }
        if (user.getPassword() == null || user.getPassword().isEmpty()) {
            throw new IllegalArgumentException("密码不能为空");
        }


        // 调用 Mapper 方法验证用户凭证
        Employee userInfo = mapper.findUserByUserName(user.getUsername());

        if (userInfo == null) {
            System.out.println("用户登录失败: 数据库中不存在《" + user.getUsername() + "》该用户");
            throw new IllegalArgumentException("未知用户");
        }


//        if (user.getRole() != null || !user.getRole().isEmpty()){
//            // 管理员后台
//
//            // 是否为admin
//            if(userInfo.getRoleId() == 1){}
//
//        }

        // 到这里 已经找到用户了 开始对比 两个密码(前端传递的密码 和数据库的密码) 是否一致

        // 拿到数据库的密码
        String dao_pwd = userInfo.getPassword();

        // 拿到前端的密码
        String pwd = user.getPassword();

        // 开始对比
        if (Objects.equals(dao_pwd, pwd)) {
            // 生成JWT token
            String token = jwtUtil.generateToken(user.getUsername());
            
            // 创建登录响应DTO
            LoginResponseDto responseDto = new LoginResponseDto();
            responseDto.setToken(token);
            
            return responseDto;
        } else {
            throw new IllegalArgumentException("账号或密码错误,请稍后重试");
        }
    }
    
    @Override
    public Employee getUserInfoByUsername(String username) {
        if (username == null || username.isEmpty()) {
            throw new IllegalArgumentException("用户名不能为空");
        }
        
        Employee userInfo = mapper.findUserByUserName(username);
        
        if (userInfo == null) {
            throw new IllegalArgumentException("未知用户");
        }
        
        return userInfo;
    }

    @Override
    public String register(RegisterVo user) {
        return "";
    }

    @Override
    public String register(Employee user) {
        // 参数校验
        if (user == null) {
            return "用户对象不能为空";
        }
        if (user.getUsername() == null || user.getUsername().isEmpty()) {
            return "用户名不能为空";
        }
        if (user.getPassword() == null || user.getPassword().isEmpty()) {
            return "密码不能为空";
        }
        if (user.getEmail() == null || user.getEmail().isEmpty()) {
            return "邮箱不能为空";
        }
        if (user.getPhone_number() == null || user.getPhone_number().isEmpty()) {
            return "电话不能为空";
        }
        if (user.getFirst_name() == null || user.getFirst_name().isEmpty()) {
            return "名字不能为空";
        }
        if (user.getLast_name() == null || user.getLast_name().isEmpty()) {
            return "姓氏不能为空";
        }
        if (user.getHire_date() == null || user.getHire_date().isEmpty()) {
            return "入职日期不能为空";
        }
        
        // 设置默认值
        if (user.getAvator() == null || user.getAvator().isEmpty()) {
            user.setAvator("/avator/default.jpg");
        }
        
        // 设置默认的position_id（职位ID）
        // 检查position_id是否有效（数据库中只有1和2）
        if (user.getPosition_id() != 1 && user.getPosition_id() != 2) {
            user.setPosition_id(2); // 默认设置为"部员"职位
        }
        
        // 设置默认的department_id（部门ID）
        // 检查department_id是否有效（数据库中有1-4）
        if (user.getDepartment_id() <= 0 || user.getDepartment_id() > 4) {
            user.setDepartment_id(1); // 默认设置为"研发部"部门
        }
        
        // 设置默认的roleId（角色ID）
        // 检查roleId是否有效（数据库中只有1和2）
        if (user.getRoleId() != 1 && user.getRoleId() != 2) {
            user.setRoleId(2); // 默认设置为"员工"角色
        }
        
        // 检查用户名是否已存在
        Employee existingUser = mapper.findUserByUserName(user.getUsername());
        if (existingUser != null) {
            return "用户名已存在，请选择其他用户名";
        }

        // 调用 Mapper 层保存用户信息到数据库
        try {
            mapper.addEmployee(user);
            return "注册成功";
        } catch (Exception e) {
            // 处理数据库保存异常
            System.err.println("用户注册失败: " + e.getMessage());
            e.printStackTrace(); // 打印详细错误信息以便调试
            return "注册失败，请稍后重试";
        }
    }
    
    @Override
    public boolean logout(String token) {
        // 参数校验
        if (token == null || token.isEmpty()) {
            throw new IllegalArgumentException("Token不能为空");
        }
        
        try {
            // 验证token是否有效
            String username = jwtUtil.extractUsername(token);
            if (username == null || username.isEmpty()) {
                // token无效，视为已登出
                return true;
            }
            
            // 在实际生产环境中，这里应该将token加入黑名单
            // 例如使用Redis存储已登出的token，直到其过期时间
            // 由于JWT是无状态的，这里简单返回true表示成功处理了登出请求
            return true;
        } catch (Exception e) {
            // token解析异常，视为已登出
            return true;
        }
    }

}

